\documentclass[a4paper,10pt]{article}

\usepackage{graphicx}
\usepackage[ansinew]{inputenc}
\usepackage[spanish]{babel}

\title{ \textbf{Trabajo pratico 1: \\ conjunto de instrucciones MIPS}}

\author{ Martinez Luis Ariel, \textit{Padr\'on Nro. 88.573} \\
\texttt{ arielcorreofiuba@gmail.com } \\[2.5ex]
Arias Damian, \textit{Padr\'on Nro. 89.952} \\
\texttt{ arias.damian@gmail.com } \\[2.5ex]
Serraino Leandro, \textit{Padr\'on Nro. 87.033} \\
\texttt{ leo22ms@gmail.com } \\[2.5ex]
\normalsize{2do. Cuatrimestre de 2012} \\
\normalsize{66.20 Organizaci\'on de Computadoras $-$ Practica Martes} \\
\normalsize{Facultad de Ingenier\'ia, Universidad de Buenos Aires} \\
}

\date{}

\begin{document}

\maketitle
\thispagestyle{empty} % quita el nmero en la primer pgina


\section{Objetivos}
Familiarizarse con el conjunto de instrucciones MIPS y el concepto de ABI,
extendiendo un programa que resuelva el problema del trabajo practico anterior,
pero se lo reimplementara en assembly MIPS.

\section{Utilizaci\'on del programa}

Compilacion del programa:\\

Estando en el sistema operativo de mips y teniendo en el directorio actual los siguientes archivos:
\begin{enumerate}
\item {\bf main.c } \\
\item {\bf odump.h } \\
\item {\bf odump.S } \\
\end{enumerate}

correr el siguiente comando:

{\bf guest\$} gcc odump.S main.c -o tp1 \\

Para la utilizacion correr las pruebas listadas en la siguiente seccion

\section{Corridas de prueba}

Estas pruebas son las mismas que se presentaron para el trabajo practico anterior.
\begin{enumerate}
\item {\bf test\_basico1.sh } \\

Proposito:
Comporbar la correcta codificacion de un archivo binario a uno octal, utilizando '' '' como delimitador y verificar que la decodificacion coincide con el archivo original. Esto se realiza mediante la ejecucion de las siguientes instrucciones\\

\$ echo -n ''test text.'' $>$ testfile.bin \\
\$ tp1 -l 4 -i testfile.bin -o testfile.oct \\
\$ tp1 -b -d '' '' -i testfile.oct -o testfile.bin.new \\
\$ diff -q testfile.bin.new testfile.bin \\

Entradas: \\
1) \\
test text. \\
2) \\
164 145 163 164 \\
040 164 145 170 \\
164 056 \\

Salidas: \\
1) \\
164 14	5 163 164 \\
040 164 145 170 \\
164 056 \\
2) \\
test text. \\

Resultados esperados: \\
1) \\
164 145 163 164 \\
040 164 145 170 \\
164 056 \\
2) \\
test text. \\

Comentario: \\
Se verifica el correcto funcionamiento de las mencionadas instrucciones, pues los resultados coinciden con los esperados. \\

\item {\bf test\_basico2.sh } \\

Proposito:
Comporbar la correcta codificacion de un archivo binario a uno octal, realizando la conversion sin delimitador y verificar que la decodificacion coincide con el archivo original. Esto se realiza mediante la ejecucion de las siguientes instrucciones\\

\$ echo -n ''test text.'' $>$ testfile.bin\\
\$ tp1 -l 4 -i testfile.bin -o testfile.oct\\
\$ tp1 -b -i testfile.oct -o testfile.bin.new\\
\$ diff -q testfile.bin.new testfile.bin\\

Entradas:\\
1)\\
test text.\\
2)\\
164145163164\\
040164145170\\
164056\\

Salidas:\\
1)\\
164145163164\\
040164145170\\
164056\\
2)\\
test text.\\
Resultados esperados:\\

1)\\
164145163164\\
040164145170\\
164056\\
2)\\
test text.\\

Comentario:\\
Se verifica el correcto funcionamiento de las mencionadas instrucciones, pues los resultados coinciden con los esperados.\\

\item {\bf test\_basico3.sh } \\

Proposito:\\
Comporbar la correcta codificacion de un archivo binario pasado por teclado a uno octal, utilizando para esto el siguiente comando \\

\$ ./tp1\\

Entrada:\\
1)\\
Quien pisa con suavidad va lejos.\\

Salida:\\
1)\\
1211651511451560401601511631410401431571560401631651411661511441411440401661\\41040154145152157163056012\\

Resultado esperado:\\
1)\\
1211651511451560401601511631410401431571560401631651411661511441411440401661\\41040154145152157163056012\\

Comentario:\\
Se verifica el correcto funcionamiento de las mencionadas instrucciones, pues el resultado coincide con el esperado.\\


\item {\bf test\_basico4.sh } \\

Proposito:\\
Comporbar la correcta codificacion de un archivo binario pasado por teclado a uno octal, utilizando para esto el siguiente comando \\

\$ ./tp1 -i -\\

Entrada:\\
1)\\
Quien pisa con suavidad va lejos.\\

Salida:\\
1)\\
1211651511451560401601511631410401431571560401631651411661511441411440401661\\41040154145152157163056012\\

Resultado esperado:\\
1)\\
1211651511451560401601511631410401431571560401631651411661511441411440401661\\41040154145152157163056012\\

Comentario:\\
Se verifica el correcto funcionamiento de las mencionadas instrucciones, pues el resultado coincide con el esperado.\\

\item {\bf test\_basico5.sh } \\


Proposito:\\
Comporbar la correcta codificacion de un archivo binario pasado por teclado a uno octal, utilizando para esto el siguiente comando \\

\$ ./tp1 -i - -o - -O\\

Entrada:\\
1)\\
Quien pisa con suavidad va lejos.\\

Salida:\\
1)\\
1211651511451560401601511631410401431571560401631651411661511441411440401661\\41040154145152157163056012\\

Resultado esperado:\\
1)\\
1211651511451560401601511631410401431571560401631651411661511441411440401661\\41040154145152157163056012\\

Comentario:\\
Se verifica el correcto funcionamiento de las mencionadas instrucciones, pues el resultado coincide con el esperado.\\

\item {\bf test\_Comparacion1.sh } \\

Proposito:\\
Comporbar la correcta codificacion de un archivo binario a uno octal, sin utilizar ningun delimitador y verificar que la decodificacion coincide con el archivo original. Esto se realiza mediante la ejecucion de las siguientes instrucciones\\

\$ echo -n ''Quien pisa con suavidad va lejos.'' $>$ testfile2.bin\\
\$ ./tp1 -i testfile2.bin -o testfile2.oct\\
\$ ./tp1 -b -i testfile2.oct -o testfile2.bin.new\\
\$ diff -q testfile2.bin.new testfile2.bin\\

Entrada:\\
1)\\
Quien pisa con suavidad va lejos.\\

Salida:\\
1)\\
1211651511451560401601511631410401431571560401631651411661511441411440401661\\41040154145152157163056012\\

Resultado esperado:\\
1)\\
1211651511451560401601511631410401431571560401631651411661511441411440401661\\41040154145152157163056012\\

Comentario:\\
Se verifica el correcto funcionamiento de las mencionadas instrucciones, pues los resultados coinciden con los esperados. Los resultados esperados son obtenidos de los siguientes sitios\\
a) http://nickciske.com/tools/octal.php\\
b) http://nickciske.com/tools/binary.php\\

\item {\bf test\_Comparacion2.sh } \\

Proposito:\\
Comporbar la correcta codificacion de un archivo octal a uno binario, sin utilizar ningun delimitador y verificar que la decodificacion coincide con el archivo original. Esto se realiza mediante la ejecucion de las siguientes instrucciones\\

\$ echo -n "12116515114515604016015116314104014315715604016316514116615114414114\\4040166141040154145152157163056" $>$ testfile3.bin\\
\$ ./tp1 -i testfile3.bin -o testfile3.oct\\
\$ ./tp1 -b -i testfile3.oct -o testfile3.bin.new\\
\$ diff -q testfile3.bin.new testfile3.bin\\

Entrada:\\
1)\\
12116515114515604016015116314104014315715604016316514116615114414114404016614104\\0154145152157163056\\

Salida:\\
1)\\
Quien pisa con suavidad va lejos.\\

Resultado esperado:\\
1)\\
Quien pisa con suavidad va lejos.\\

Comentario:\\
Se verifica el correcto funcionamiento de las mencionadas instrucciones, pues los resultados coinciden con los esperados. Estos resultados\\ esperados son obtenidos de los siguientes sitios\\
a) http://nickciske.com/tools/octal.php\\
b) http://nickciske.com/tools/binary.php\\

\item {\bf test\_Comparacion3.sh } \\

Proposito:\\
Comporbar la correcta codificacion de un archivo octal a uno binario, siendo el primero un archivo delimitado por ''.'' y con una longitud de 4 bytes. Luego verificar que la decodificacion coincide con el archivo original. Esto se realiza mediante la ejecucion de las siguientes instrucciones\\

\$ echo -n ''Quien pisa con suavidad va lejos.'' $>$ testfile4.bin\\
\$ ./tp1 -l 4 -d ''.'' -i testfile4.bin -o testfile4.oct\\
\$ ./tp1 -b -l 4 -d ''.'' -i testfile4.oct -o testfile4.bin.new\\
\$ diff -q testfile4.bin.new testfile4.bin\\

Entrada:\\
1)\\
Quien pisa con suavidad va lejos.\\

Salida:\\
1)\\
121.165.151.145\\
156.040.160.151\\
163.141.040.143\\
157.156.040.163\\
165.141.166.151\\
144.141.144.040\\
166.141.040.154\\
145.152.157.163\\
056\\

Resultado esperado:\\
1)\\
121.165.151.145\\
156.040.160.151\\
163.141.040.143\\
157.156.040.163\\
165.141.166.151\\
144.141.144.040\\
166.141.040.154\\
145.152.157.163\\
056\\

Comentario:\\
Se verifica el correcto funcionamiento de las mencionadas instrucciones, pues los resultados coinciden con los esperados. Estos resultados esperados son obtenidos de los siguientes sitios\\
a) http://nickciske.com/tools/octal.php\\
b) http://nickciske.com/tools/binary.php\\

\item {\bf test\_random.sh } \\

Proposito:\\
Comporbar la correcta codificacion de un archivo binario random tomado del sistema a octal, usando una longitud de 6 bytes por linea y ''$|$'' como delimitadior. Para esto se utilizo la siguiente instruccion\\

\$ head -c10 /dev/random $|$ ./tp1 -o /tmp/random-octaldump -l 6 -d ''$|$''\\

Comentario:\\
Se verifica el correcto funcionamiento de la mencionada instruccion, pues el archivo random codificado a octal, es el mismo que se obtiene luego de una decodificacion a binario y una nueva codificacion a octal.\\
Como se puede ver en los siguiente casos:\\

1)\\
Archivo random codificado a octal\\
323$|$111$|$265$|$217$|$143$|$171\\
271$|$223$|$232$|$150\\

Archivo anterior decodificado a binario\\
�I�y���h   (no son representable a caracteres legibles)\\ %todo: corregir este error de codificacion

Archivo anterior nuevamente codificado a octal\\
323$|$111$|$265$|$217$|$143$|$171\\
271$|$223$|$232$|$150\\

2)\\
Archivo random codificado a octal\\
061$|$221$|$074$|$117$|$062$|$145\\
065$|$156$|$126$|$375\\

Archivo anterior decodificado a binario\\
1�<O2e5nV      (no son representable a caracteres legibles)\\ %todo: corregir este error de codificacion

Archivo anterior nuevamente codificado a octal\\
061$|$221$|$074$|$117$|$062$|$145\\
065$|$156$|$126$|$375\\

\item {\bf test\_error1.sh } \\

Proposito:\\
Comporbar que no se puede codificar un archivo de entrada cuyo nombre supera la longitud maxima permitida, ni tampoco generar un archivo de salida cuyo nombre tambien supere la longitud maxima. Para lo cual se ejecutan las siguientes instrucciones.\\

\$ echo -n ''test text.'' $>$ testfileconnombredemasiadolargo.bin\\
\$ ./tp1 -d '' '' -i testfileconnombredemasiadolargo.bin -o testfile1.oct\\

\$ echo ''Se trata de codificar un archivo de salida cuyo nombre supera la longitud maxima permitida.''\\
\$ ./tp1 -b -d '' '' -i testfile1.oct -o testfileconnombredemasiadolargo.bin.new\\

Salida:\\
La long. del parametro <input file> supera los 30 caracteres\\
La long. del parametro <output file> supera los 30 caracteres\\

Comentario:\\
Se comprueba el correcto manejo de dicho error, pues la salida es la esperada.\\

\item {\bf test\_error2.sh } \\

Proposito:\\
Comporbar que no se puede codificar un archivo utilizando una cantidad de bytes octales por linea invalida. Para lo cual se ejecutan las siguientes instrucciones.\\

\$ echo -n "test text." $>$ testfile1.bin\\
\$ ./tp1 -l -d '' '' -i testfile1.bin -o testfile1.oct\\

Salida:\\
La longitud de linea propuesta es invalida\\

Comentario:\\
Se comprueba el correcto manejo de dicho error, pues la salida es la esperada.\\

\item {\bf test\_error3.sh } \\

Proposito:\\
Comporbar que no se puede ejecutar un comando en el cual hay un parametro no definido. Para lo cual se ejecutan las siguientes instrucciones.\\

\$ echo -n ''test text.'' $>$ testfile1.bin\\
\$ ./tp1 -r -d '' '' -i testfile1.bin -o testfile1.oct\\

Salida:\\
./tp1: invalid option -- 'r'\\
Parametro no valido: ?\\

Comentario:\\
Se comprueba el correcto manejo de dicho error, pues la salida es la esperada.\\

\item {\bf test\_error4.sh } \\

Proposito:\\
Comporbar que no se puede codificar de octal a binario, un archivo que no es octal. Para lo cual se ejecutan las siguientes instrucciones.\\

\$ echo -n ''test text.'' $>$ testfile1.oct\\
\$ ./tp1 -b -i testfile1.oct -o testfile1.bin\\

Salida:\\
Entrada invalida: (tes). Se esperaba un nro octal\\

Comentario:\\
Se comprueba el correcto manejo de dicho error, pues la salida es la esperada.\\

\item {\bf test\_error5.sh } \\

Proposito:\\
Comporbar que no se puede codificar a octal un archivo binario inexistente. Para lo cual se ejecutan las siguientes instrucciones.\\

\$ echo -n ''test text.'' $>$ testfile1.bin\\
\$ ./tp1 -d '' '' -i testfileinexistente.bin -o testfile1.oct\\

Salida:\\
No se pudo abrir el archivo testfileinexistente.bin\\

Comentario:\\
Se comprueba el correcto manejo de dicho error, pues la salida es la esperada.\\

\end{enumerate}


\section{C\'odigo fuente}

\newpage
\section{C\'odigo MIPS}

\newpage
\section{Conclusiones}

	En el presente trabajo se resolvi\'o un problema planteado en el trabajo pr\'actico anterior pero esta vez implementando la l\'ogica en assembly de MIPS. El desarrollo se realizo respetando la ABI. Utilizamos la funciones de llamadas al sistema, y con sus respectivos manejos de
	errores.
\newpage

	\begin{thebibliography}{99}
		\bibitem{proc} Informaci\'on adicional sobre MIPS, http://es.wikipedia.org/wiki/MIPS\_(procesador).
		\bibitem{tech} MIPS Technologies, http://www.mips.com/.
		\bibitem{abi} MIPS ABI, http://refspecs.freestandards.org/elf/mipsabi.pdf/.
	\end{thebibliography}

\end{document}
